package cn.dq.demo.design.singleton;

import org.springframework.stereotype.Component;

@Component
//内部类单例模式
//首先，静态成员变量会随类的初始化而初始化，但是静态内部类不会，静态内部类只有当被外部类调用到的时候才会初始化。
//https://blog.csdn.net/lyabc123456/article/details/80262895
// 也就是说只有第一次调用getInstance时，SingletonHolder.instance会初始化SingletonHolder，紧接着instance是SingletonHolder的静态成员变量，一期被初始化，而且唯一属于SingletonHolder
public class InnerClassSingletonDesign {

    private InnerClassSingletonDesign() {
    }

    /**
     * 类级的内部类，也就是静态的成员式内部类，该内部类的实例与外部类的实例
     * 没有绑定关系，而且只有被调用到时才会装载，从而实现了延迟加载。
     */
    private static class SingletonHolder {
        private static InnerClassSingletonDesign instance = new InnerClassSingletonDesign();
    }

    public static InnerClassSingletonDesign getInstance() {
        return SingletonHolder.instance;
    }
}
